<?php
/**
 * sfWidgetFormRichDate
 * 
 * Génère un widget de date ou datetime enrichi d'un datepicker JQuery.
 * @author tat
 *
 */
class sfWidgetFormRichDate extends sfWidgetFormDate
{

	/**
	 * Conguration du widget
	 * Options principales
	 *  - culture : la langue utilisée pour l'affichage et le date picker -- string (par défaut : fr)
	 *  - withTime : ajout de l'heure -- boolean (par défaut : false)
	 *  - defaultValue : valeur par défaut -- string au format 'YYYY-mm-dd' (par défaut : null)
	 *  - defaultValueNow : initialiser la date par défaut à celle actuelle -- boolean (par défaut : false)
	 *  - imageButton : image du bouton pour le picker -- string (par défaut : '/sf/sf_admin/images/date.png')
	 *  - et les autres options de sfWidgetFormDate...
	 */
	protected function configure($options = array(), $attributes = array())
	{
		parent::configure($options, $attributes);
		$this->addOption('withTime', false);
		$this->addOption('defaultValue', null);
		$this->addOption('defaultValueNow', false);
		$this->addOption('imageButton', '/sf/sf_admin/images/date.png');
		$this->addOption('culture', sfContext::getInstance()->getUser()->getCulture());
		
		/*
		 * Il manque le partiel "Form" ? Pas de problème...
		 */
		if(!function_exists('input_date_tag')) {
			$context = sfContext::getInstance();
			$context->getConfiguration()->loadHelpers(array('Tag', 'Asset'), $context->getModuleName());
		}
	}

	/**
	 * Retourne le code HTML du widget
	 */
	public function render($name, $value = null, $attributes = array(), $errors = array())
	{
		if(!is_null($value)){
			$validator = new sfValidatorRichDate();
			try {
				$frombdd = true;
				if(preg_match("/^\d\d\/\d\d\/\d\d/", $value))
					$frombdd = false;
				$value = $validator->nettoyer($value, $frombdd);
			}
			catch(Exception $e){
				$value = null;
			}
		}

		if($value == null && $this->getOption('defaultValue') != null && $this->getOption('defaultValue') != '')
			$value = $this->getOption('defaultValue');
			
		if($value == null && $this->getOption('defaultValueNow') == true)
			if($this->getOption('withTime') == true)
				$value = date('Y-m-d G:i');
			else
				$value = date('Y-m-d');

		$defaultOptions = array (
			'rich' => true,
			'withtime' => $this->getOption('withTime'),
			'calendar_button_img' => $this->getOption('imageButton'),
			'control_name' => $name,
			'culture' => $this->getOption('culture'),
		);
		
		$options = _parse_attributes($defaultOptions);
		$options = array_merge($options, sfToolkit::stringToArray($this->attributesToHtml($attributes)));
		// EN CAS DE DEBUG : echo "<pre>".print_r($options,1)."</pre>";
		return input_date_tag($name, $value, $options);
	}
}